inspector: Manage visibility of stack pages
authorMatthias Clasen <mclasen@redhat.com>
Tue, 2 Apr 2019 23:24:57 +0000 (23:24 +0000)
committerMatthias Clasen <mclasen@redhat.com>
Tue, 2 Apr 2019 23:36:45 +0000 (23:36 +0000)
The hand-rolled stack combo we were using before
was looking at the visibility of the page itself
to show or hide items. Other stack switchers
expect us to use the GtkStackPage::visible
property for this.

gtk/inspector/actions.c
gtk/inspector/controllers.c
gtk/inspector/css-node-tree.c
gtk/inspector/data-list.c
gtk/inspector/magnifier.c
gtk/inspector/menu.c
gtk/inspector/size-groups.c

index cd6f413ac2a68960be565072b7729cf08c5e98bd..c4ec553c27156e0ecaae19b48be99eef53360cb6 100644 (file)
@@ -28,6 +28,7 @@
 #include "gtkwidgetprivate.h"
 #include "gtkpopover.h"
 #include "gtklabel.h"
+#include "gtkstack.h"
 
 enum
 {
@@ -167,13 +168,14 @@ action_state_changed_cb (GActionGroup        *group,
 
 static void
 add_group (GtkInspectorActions *sl,
+           GtkStackPage        *page,
            GActionGroup        *group,
            const gchar         *prefix)
 {
   gint i;
   gchar **names;
 
-  gtk_widget_show (GTK_WIDGET (sl));
+  g_object_set (page, "visible", TRUE, NULL);
 
   g_signal_connect (group, "action-added", G_CALLBACK (action_added_cb), sl);
   g_signal_connect (group, "action-removed", G_CALLBACK (action_removed_cb), sl);
@@ -203,16 +205,22 @@ void
 gtk_inspector_actions_set_object (GtkInspectorActions *sl,
                                   GObject             *object)
 {
-  gtk_widget_hide (GTK_WIDGET (sl));
+  GtkWidget *stack;
+  GtkStackPage *page;
+
+  stack = gtk_widget_get_parent (GTK_WIDGET (sl));
+  page = gtk_stack_get_page (GTK_STACK (stack), GTK_WIDGET (sl));
+
+  g_object_set (page, "visible", FALSE, NULL);
   g_hash_table_foreach (sl->priv->groups, disconnect_group, sl);
   g_hash_table_remove_all (sl->priv->groups);
   g_hash_table_remove_all (sl->priv->iters);
   gtk_list_store_clear (sl->priv->model);
   
   if (GTK_IS_APPLICATION (object))
-    add_group (sl, G_ACTION_GROUP (object), "app");
+    add_group (sl, page, G_ACTION_GROUP (object), "app");
   else if (GTK_IS_APPLICATION_WINDOW (object))
-    add_group (sl, G_ACTION_GROUP (object), "win");
+    add_group (sl, page, G_ACTION_GROUP (object), "win");
   else if (GTK_IS_WIDGET (object))
     {
       const gchar **prefixes;
@@ -225,7 +233,7 @@ gtk_inspector_actions_set_object (GtkInspectorActions *sl,
           for (i = 0; prefixes[i]; i++)
             {
               group = gtk_widget_get_action_group (GTK_WIDGET (object), prefixes[i]);
-              add_group (sl, group, prefixes[i]);
+              add_group (sl, page, group, prefixes[i]);
             }
           g_free (prefixes);
         }
index 179b4fa62547f483f85f2a0d99a646a546349a31..4fa0b313b83a08cfd63387c78c996548c01481a4 100644 (file)
@@ -33,6 +33,7 @@
 #include "gtkscrolledwindow.h"
 #include "gtksortlistmodel.h"
 #include "gtkwidgetprivate.h"
+#include "gtkstack.h"
 
 enum
 {
@@ -204,13 +205,23 @@ void
 gtk_inspector_controllers_set_object (GtkInspectorControllers *sl,
                                       GObject                 *object)
 {
+  GtkWidget *stack;
+  GtkStackPage *page;
   GtkInspectorControllersPrivate *priv = sl->priv;
   GtkMapListModel *map_model;
   GtkFlattenListModel *flatten_model;
   GtkSortListModel *sort_model;
 
+  stack = gtk_widget_get_parent (GTK_WIDGET (sl));
+  page = gtk_stack_get_page (GTK_STACK (stack), GTK_WIDGET (sl));
+
   if (!GTK_IS_WIDGET (object))
-    return;
+    {
+      g_object_set (page, "visible", FALSE, NULL);
+      return;
+    }
+
+  g_object_set (page, "visible", TRUE, NULL);
 
   priv->model = gtk_property_lookup_list_model_new (GTK_TYPE_WIDGET, "parent");
   gtk_property_lookup_list_model_set_object (priv->model, object);
index b7d9a3cb13291f66b7935d75b9f158f381979326..6093c81d5f43fb5c33a00597652a3f522983e8f8 100644 (file)
@@ -408,6 +408,8 @@ void
 gtk_inspector_css_node_tree_set_object (GtkInspectorCssNodeTree *cnt,
                                         GObject                 *object)
 {
+  GtkWidget *stack;
+  GtkStackPage *page;
   GtkInspectorCssNodeTreePrivate *priv;
   GtkCssNode *node, *root;
   GtkTreePath *path;
@@ -417,13 +419,16 @@ gtk_inspector_css_node_tree_set_object (GtkInspectorCssNodeTree *cnt,
 
   priv = cnt->priv;
 
+  stack = gtk_widget_get_parent (GTK_WIDGET (cnt));
+  page = gtk_stack_get_page (GTK_STACK (stack), GTK_WIDGET (cnt));
+
   if (!GTK_IS_WIDGET (object))
     {
-      gtk_widget_hide (GTK_WIDGET (cnt));
+      g_object_set (page, "visible", FALSE, NULL);
       return;
     }
 
-  gtk_widget_show (GTK_WIDGET (cnt));
+  g_object_set (page, "visible", TRUE, NULL);
 
   root = node = gtk_widget_get_css_node (GTK_WIDGET (object));
   while (gtk_css_node_get_parent (root))
index 6ba7955f0e820e0eb8801cee193dd99e6cf96640..c15ace135217816bde0b1dfcfdde00ab2e6d82be 100644 (file)
@@ -26,6 +26,7 @@
 #include "gtkcellrenderertext.h"
 #include "gtktogglebutton.h"
 #include "gtklabel.h"
+#include "gtkstack.h"
 
 
 struct _GtkInspectorDataListPrivate
@@ -116,15 +117,20 @@ void
 gtk_inspector_data_list_set_object (GtkInspectorDataList *sl,
                                     GObject              *object)
 {
+  GtkWidget *stack;
+  GtkStackPage *page;
   gchar *title;
 
+  stack = gtk_widget_get_parent (GTK_WIDGET (sl));
+  page = gtk_stack_get_page (GTK_STACK (stack), GTK_WIDGET (sl));
+
   clear_view (sl);
   sl->priv->object = NULL;
   sl->priv->show_data = FALSE;
 
   if (!GTK_IS_TREE_MODEL (object))
     {
-      gtk_widget_hide (GTK_WIDGET (sl));
+      g_object_set (page, "visible", FALSE, NULL);
       return;
     }
 
@@ -132,7 +138,7 @@ gtk_inspector_data_list_set_object (GtkInspectorDataList *sl,
   gtk_label_set_label (GTK_LABEL (sl->priv->object_title), title);
   g_free (title);
 
-  gtk_widget_show (GTK_WIDGET (sl));
+  g_object_set (page, "visible", TRUE, NULL);
 
   sl->priv->object = GTK_TREE_MODEL (object);
   add_columns (sl);
index f4a0f7e2e37cede1f2cf4ff2120d6e7fea8c6a65..34cf33fa1979806b8416fb48671c60423fb234e2 100644 (file)
@@ -24,6 +24,7 @@
 
 #include "gtklabel.h"
 #include "gtkadjustment.h"
+#include "gtkstack.h"
 
 enum
 {
@@ -51,16 +52,22 @@ void
 gtk_inspector_magnifier_set_object (GtkInspectorMagnifier *sl,
                                     GObject              *object)
 {
+  GtkWidget *stack;
+  GtkStackPage *page;
+
+  stack = gtk_widget_get_parent (GTK_WIDGET (sl));
+  page = gtk_stack_get_page (GTK_STACK (stack), GTK_WIDGET (sl));
+
   sl->priv->object = NULL;
 
   if (!GTK_IS_WIDGET (object) || !gtk_widget_is_visible (GTK_WIDGET (object)))
     {
-      gtk_widget_hide (GTK_WIDGET (sl));
+      g_object_set (page, "visible", FALSE, NULL);
       _gtk_magnifier_set_inspected (GTK_MAGNIFIER (sl->priv->magnifier), NULL);
       return;
     }
 
-  gtk_widget_show (GTK_WIDGET (sl));
+  g_object_set (page, "visible", TRUE, NULL);
 
   sl->priv->object = GTK_WIDGET (object);
 
index 8a4d1ad93fc7408799eab4b132be11815e59ff9e..33744189428ab1ed8d952c5425c87de55bc4f63a 100644 (file)
@@ -23,6 +23,7 @@
 #include "gtktreestore.h"
 #include "gtkwidgetprivate.h"
 #include "gtklabel.h"
+#include "gtkstack.h"
 
 
 enum
@@ -49,11 +50,13 @@ gtk_inspector_menu_init (GtkInspectorMenu *sl)
 }
 
 static void add_menu (GtkInspectorMenu *sl,
+                      GtkStackPage     *page,
                       GMenuModel       *menu,
                       GtkTreeIter      *parent);
 
 static void
 add_item (GtkInspectorMenu *sl,
+          GtkStackPage     *page,
           GMenuModel       *menu,
           gint              idx,
           GtkTreeIter      *parent)
@@ -91,14 +94,14 @@ add_item (GtkInspectorMenu *sl,
         gtk_tree_store_set (sl->priv->model, &iter,
                             COLUMN_LABEL, _("Unnamed section"),
                             -1);
-      add_menu (sl, model, &iter);
+      add_menu (sl, page, model, &iter);
       g_object_unref (model);
     }
 
   model = g_menu_model_get_item_link (menu, idx, G_MENU_LINK_SUBMENU);
   if (model)
     {
-      add_menu (sl, model, &iter);
+      add_menu (sl, page, model, &iter);
       g_object_unref (model);
     }
 
@@ -110,28 +113,35 @@ add_item (GtkInspectorMenu *sl,
 
 static void
 add_menu (GtkInspectorMenu *sl,
+          GtkStackPage     *page,
           GMenuModel       *menu,
           GtkTreeIter      *parent)
 {
   gint n_items;
   gint i;
 
-  gtk_widget_show (GTK_WIDGET (sl));
+  g_object_set (page, "visible", TRUE, NULL);
 
   n_items = g_menu_model_get_n_items (menu);
   for (i = 0; i < n_items; i++)
-    add_item (sl, menu, i, parent);
+    add_item (sl, page, menu, i, parent);
 }
 
 void
 gtk_inspector_menu_set_object (GtkInspectorMenu *sl,
                                GObject          *object)
 {
-  gtk_widget_hide (GTK_WIDGET (sl));
+  GtkWidget *stack;
+  GtkStackPage *page;
+
+  stack = gtk_widget_get_parent (GTK_WIDGET (sl));
+  page = gtk_stack_get_page (GTK_STACK (stack), GTK_WIDGET (sl));
+
+  g_object_set (page, "visible", FALSE, NULL);
   gtk_tree_store_clear (sl->priv->model);
   
   if (G_IS_MENU_MODEL (object))
-    add_menu (sl, G_MENU_MODEL (object), NULL);
+    add_menu (sl, page, G_MENU_MODEL (object), NULL);
 }
 
 static void
index 0537edba004dd388a20696222ed181afdf01624f..6cd583699b5ca2a1c0a70beb7765edd3c818f67c 100644 (file)
@@ -31,6 +31,7 @@
 #include "gtkstylecontext.h"
 #include "gtkswitch.h"
 #include "gtkwidgetprivate.h"
+#include "gtkstack.h"
 
 
 typedef struct {
@@ -210,7 +211,6 @@ add_widget (GtkInspectorSizeGroups *sl,
   g_object_set (label, "margin", 10, NULL);
   gtk_widget_set_halign (label, GTK_ALIGN_START);
   gtk_widget_set_valign (label, GTK_ALIGN_BASELINE);
-  gtk_widget_show (label);
   gtk_container_add (GTK_CONTAINER (row), label);
   gtk_container_add (GTK_CONTAINER (listbox), row);
 }
@@ -266,18 +266,22 @@ gtk_inspector_size_groups_set_object (GtkInspectorSizeGroups *sl,
                                       GObject                *object)
 {
   GSList *groups, *l;
+  GtkWidget *stack;
+  GtkStackPage *page;
+
+  stack = gtk_widget_get_parent (GTK_WIDGET (sl));
+  page = gtk_stack_get_page (GTK_STACK (stack), GTK_WIDGET (sl));
+
+  g_object_set (page, "visible", FALSE, NULL);
 
   clear_view (sl);
 
   if (!GTK_IS_WIDGET (object))
-    {
-      gtk_widget_hide (GTK_WIDGET (sl));
-      return;
-    }
+    return;
 
   groups = _gtk_widget_get_sizegroups (GTK_WIDGET (object));
   if (groups)
-    gtk_widget_show (GTK_WIDGET (sl));
+    g_object_set (page, "visible", TRUE, NULL);
   for (l = groups; l; l = l->next)
     {
       GtkSizeGroup *group = l->data;